package org.jeecg.modules.oms.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.oms.vo.FinanceStatisticsVO;

import java.util.List;
import java.util.Map;

/**
 * @Description: 财务统计Mapper接口 - 应收应付模块
 * @Author: jeecg-boot
 * @Date: 2025-01-13
 * @Version: V1.0
 */
@Mapper
public interface FinanceStatisticsMapper {

    // ==================== 应收应付分析相关方法 ====================

    /**
     * 获取应收账款树形结构数据（客户-工程-订单三级）
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 应收账款树形结构数据
     */
    List<Map<String, Object>> getReceivableTreeData(@Param("startDate") String startDate,
                                                    @Param("endDate") String endDate);

    /**
     * 获取应付账款树形结构数据（供应商-采购单-采购明细三级）
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 应付账款树形结构数据
     */
    List<Map<String, Object>> getPayableTreeData(@Param("startDate") String startDate,
                                                 @Param("endDate") String endDate);

    /**
     * 获取应收应付汇总统计数据
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 应收应付汇总统计数据
     */
    Map<String, Object> getReceivablePayableSummary(@Param("startDate") String startDate,
                                                    @Param("endDate") String endDate);

    /**
     * 获取应收应付对比数据
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @param period    统计周期
     * @return 应收应付对比数据
     */
    List<Map<String, Object>> getReceivablePayableComparisonData(@Param("startDate") String startDate,
                                                                 @Param("endDate") String endDate,
                                                                 @Param("period") String period);

    /**
     * 获取账期分析数据
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 账期分析数据
     */
    List<Map<String, Object>> getAgingAnalysisData(@Param("startDate") String startDate,
                                                   @Param("endDate") String endDate);

    /**
     * 获取资金流动性分析数据
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @param period    统计周期
     * @return 资金流动性分析数据
     */
    List<Map<String, Object>> getLiquidityAnalysisData(@Param("startDate") String startDate,
                                                       @Param("endDate") String endDate,
                                                       @Param("period") String period);
}
